Data transfer between devices on a network may involve fragmenting the data into individual chunks of data and formatting those individual chunks of data into data packets with certain header information to assist network equipment in delivering the chunk of data to a desired final destination. When data is fragmented into individual chunks of data, the formatted data packets for the chunks of data may include identifier information to allow a receiving device to match up the chunks of data and recreate the original complete data.
One conventional method for performing the process of fragmenting data and formatting data packets is shown in FIG. 1. FIG. 1 is a flow chart illustrating a conventional method of formatting data packets. A method 100 begins at block 102 with initializing a running identification value with a pseudo-random algorithm based on a system clock value. At block 104 for each formatted data packet created from data for transmission over the network, the current running identification value is inserted into the formatted data packet. After using the current running identification value, the current running identification value is incremented, such as by adding the number one to the value. Block 104 may continue to be repeated, and the current running identification value incremented for each formatted data packet.
However, the method of FIG. 1 for sending data may leave the receiver open to certain attacks from malicious third parties. For example, because the current identification value is only incremented by one for each formatted data packet, the identification value for future formatted data packets is very predictable. A malicious third party could use the current identification value, extracted from a data packet intercepted on the Internet, to begin sending data packets to the receiver that confuse the receiver and may interrupt services on the receiver. In one particular attack, the receiver is vulnerable to a man-in-the-middle attack.